
public class Test {
    public static void main(String[] args) {
        Demo demo = new Demo();
        demo.something();
    }
}

// 匿名继承类
// 一次只能“继承”或“实现”其中之一
// 父类：必须带参构造器
abstract class Base {
    private final int x;

    Base(int x) {
        this.x = x;
        System.out.println("Base 构造器收到 x = " + x);
    }

    int getX() {
        return x;
    }
}

class Demo {
    void something() {
        // 匿名子类
        Base b = new Base(100) { // 1. 给父类送参
            private int extra; // 2. 新增私有属性

            { // 3. 实例初始化块（“伪构造器”）
                extra = getX() * 2; // 可以调用父类方法
                System.out.println("匿名类初始化块，extra = " + extra);
            }

            // 额外方法（只能反射或向下转型调用）
            int getExtra() {
                return extra;
            }

            @Override
            public String toString() {
                return "Base.x=" + getX() + ", anonymous.extra=" + extra;
            }
        };

        System.out.println(b); // 4. 打印结果
    }
}